import argparse
import os
from functools import lru_cache

from dotenv import load_dotenv

# from config import *
from config.config import AppConfigSettings


@lru_cache
def get_config() -> AppConfigSettings:
    """获取项目配置"""
    # 解析命令行参数
    # parse_cli_args()
    # 读取运行环境
    run_env = os.environ.get("APP_ENV", "")
    print("运行环境：", run_env)
    # 默认加载.env
    env_file = ".env"
    if run_env != "" and run_env != "local":
        # 当是其他环境时，如测试环境: 加载 .env.dev 正式环境: 加载.env.prod 预发环境：加载.env.pre
        env_file = f".env.{run_env}"
    # 清除环境变量缓存
    os.environ.clear()
    # 加载 .env 文件
    load_dotenv(env_file)
    # 实例化配置模型
    return AppConfigSettings()


def parse_cli_args():
    """解析命令行参数"""
    import sys

    if "uvicorn" in sys.argv[0]:
        return
    # 使用argparse 定义命令行参数
    parser = argparse.ArgumentParser(description="命令行参数")
    parser.add_argument("--env", type=str, default="dev", help="运行环境")
    # 解析命令行参数
    args = parser.parse_args()
    # 设置环境变量
    # uvicorn模式启动，读取的.env*里面的APP_ENV
    os.environ["APP_ENV"] = args.env


# 创建配饰实例
appSettings = get_config()
